package thread;

// 创建线程：实现Runnable接口

class MyRunnable implements Runnable { // Runnable 接口 重写run方法
    // run里面是线程要执行的工作！！
    @Override
    public void run() {
        while(true) {
            System.out.println("hello thread!");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class Demo2 {
    public static void main(String[] args) {
        // Runnable的实例 传给线程！！
        // 把 线程要干的活 和 线程本身 分开了
        // 使用Runnable来专门表示“线程要完成的工作”
        // 把任务提取出来，目的是为了“解耦合”
        // 假设未来要对这个代码进行调整（如：不用多线程了，用其他方式），则代码改动就会很大；
        // 而Runnable这种写法就只需要Runnable传给其他的实体就行。

        MyRunnable myRunnable = new MyRunnable();
        Thread thread = new Thread(myRunnable);
        thread.start();

        Thread thread2 = new Thread(myRunnable);
        thread2.start();

        //也就是说：如果想要让多个线程都干一样的活，这个时候就更适合使用Runnable，直接创建多个Thread对象就行

        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
